﻿Imports WSEntidades
Imports Utilerias
Imports WSDatos
Public Class ClientesComBL
    Public Function RegistrarClienteCom(ByVal TokenConexion As String, ByVal ClienteCom As ClientesComBE, ByRef codigoResp As Integer, ByRef mensajes As String) As Boolean
        Dim CliComDAL As ClientesComDAL = New ClientesComDAL("")
        mensajes = ""
        Try
            TokenConexion = RijndaelSimple.desencriptaDefault(TokenConexion)
            If (EsValidoParaRegistrar(ClienteCom, mensajes)) Then
                CliComDAL = New ClientesComDAL(TokenConexion)
                If (CliComDAL.existeClienteCom(ClienteCom.IdCli)) Then
                    codigoResp = 343
                    mensajes &= "Existe un registro con el mismo Id del cliente indicado." & vbCrLf
                    Return False
                Else
                    If (CliComDAL.registraClienteCom(ClienteCom)) Then
                        codigoResp = 0
                        mensajes = "Los Datos Comerciales del Cliente se registraron con éxito."
                        Return True
                    Else
                        codigoResp = 344
                        mensajes &= "Los Datos Comerciales del Cliente no pudieron ser registrados en el sistema." & vbCrLf
                        Return False
                    End If
                End If
            Else
                codigoResp = 1
                mensajes = "El Cliente no es valido para registrar: " & mensajes
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "ClientesComBL.RegistrarClienteCom")
            codigoResp = 999
            mensajes = mensajes & "Excepción al registrar el Cliente: " & ex.Message
            Return False
        Finally
            CliComDAL = Nothing
        End Try
    End Function

    Private Function EsValidoParaRegistrar(ByRef ClienteCom As ClientesComBE, ByRef mensaje As String) As Boolean
        mensaje = ""
        Try
            If Not (String.IsNullOrWhiteSpace(ClienteCom.LimiteCredito)) Then
                If Not (IsNumeric(ClienteCom.LimiteCredito)) Then
                    mensaje &= "EL Limite de Credito del Cliente debe ser de tipo numérico." & vbCrLf
                Else
                    ClienteCom.LimiteCredito = Decimal.Parse(ClienteCom.LimiteCredito).ToString("N6")
                End If
            End If

            If Not (String.IsNullOrWhiteSpace(ClienteCom.Saldo)) Then
                If Not (IsNumeric(ClienteCom.Saldo)) Then
                    mensaje &= "EL Saldo del Cliente debe ser de tipo numérico." & vbCrLf
                Else
                    ClienteCom.Saldo = Decimal.Parse(ClienteCom.Saldo).ToString("N6")
                End If
            End If

            If Not (String.IsNullOrWhiteSpace(ClienteCom.DiasCredito)) Then
                If Not (IsNumeric(ClienteCom.DiasCredito)) Then
                    mensaje &= "Los Dias de Credito debe ser de tipo numérico." & vbCrLf
                End If
            End If

            If Not (String.IsNullOrWhiteSpace(ClienteCom.Banco)) Then
                ClienteCom.Banco = ClienteCom.Banco.Trim
                If (ClienteCom.Banco.Length > 50) Then
                    ClienteCom.Banco = ClienteCom.Banco.Substring(0, 50)
                End If
            End If

            If Not (String.IsNullOrWhiteSpace(ClienteCom.CuentaBancaria)) Then
                ClienteCom.CuentaBancaria = ClienteCom.CuentaBancaria.Trim
                If (ClienteCom.CuentaBancaria.Length > 50) Then
                    ClienteCom.CuentaBancaria = ClienteCom.CuentaBancaria.Substring(0, 50)
                End If
            End If

            If Not (String.IsNullOrWhiteSpace(ClienteCom.Descuento)) Then
                If Not (IsNumeric(ClienteCom.Descuento)) Then
                    mensaje &= "EL Descuento del Cliente debe ser de tipo numérico." & vbCrLf
                Else
                    ClienteCom.Descuento = Decimal.Parse(ClienteCom.Descuento).ToString("N6")
                End If
            End If

            If Not (String.IsNullOrWhiteSpace(ClienteCom.CuentaContable)) Then
                ClienteCom.CuentaContable = ClienteCom.CuentaContable.Trim
                If (ClienteCom.CuentaContable.Length > 50) Then
                    ClienteCom.CuentaContable = ClienteCom.CuentaContable.Substring(0, 50)
                End If
            End If

            'If Not (String.IsNullOrWhiteSpace(ClienteCom.SubCuenta)) Then
            '    ClienteCom.SubCuenta = ClienteCom.SubCuenta.Trim
            '    If (ClienteCom.SubCuenta.Length > 50) Then
            '        ClienteCom.SubCuenta = ClienteCom.SubCuenta.Substring(0, 50)
            '    End If
            'End If

            If Not (String.IsNullOrWhiteSpace(ClienteCom.CuentaAnticipos)) Then
                ClienteCom.CuentaAnticipos = ClienteCom.CuentaAnticipos.Trim
                If (ClienteCom.CuentaAnticipos.Length > 50) Then
                    ClienteCom.CuentaAnticipos = ClienteCom.CuentaAnticipos.Substring(0, 50)
                End If
            End If

            Return (mensaje = "")
        Catch ex As Exception
            Log.LogException(ex, "ClientesComBL.EsValidoParaRegistrar")
            mensaje &= ex.Message
            Return False
        End Try
    End Function

    Public Function ActualizaClienteCom(ByVal TokenConexion As String, ByVal ClienteCom As ClientesComBE, ByRef codigoResp As Integer, ByRef mensajes As String) As Boolean
        mensajes = ""
        Dim ClicomDAL As ClientesComDAL = New ClientesComDAL("")
        Try
            TokenConexion = RijndaelSimple.desencriptaDefault(TokenConexion)
            If (EsValidoParaRegistrar(ClienteCom, mensajes)) Then
                ClicomDAL = New ClientesComDAL(TokenConexion)
                If (ClicomDAL.actualizaClienteCom(ClienteCom)) Then
                    codigoResp = 0
                    mensajes = "Datos del Cliente actualizados."
                    Return True
                Else
                    codigoResp = 345
                    mensajes = "No se pudo realizar la actualización de los Datos Comerciales del Cliente."
                    Return False
                End If
            Else
                codigoResp = 1
                mensajes = "La informacion no es valida para actualizar: " & mensajes
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "ClientesComBL.ActualizaClienteCom")
            codigoResp = 999
            mensajes = mensajes & "Excepción al actualizar Cliente: " & ex.Message
            Return False
        Finally
            ClicomDAL = Nothing
        End Try
    End Function

    Public Function GetClienteCom(ByVal tokenConexion As String, ByVal IdCli As Integer, ByRef codigoResp As Integer, ByRef mensajes As String) As ClientesComBE
        mensajes = ""
        Dim CliComDAL As ClientesComDAL = New ClientesComDAL("")
        Dim CliComBE As ClientesComBE
        Try
            tokenConexion = RijndaelSimple.desencriptaDefault(tokenConexion)
            If (EsValidoParaGetClienteCom(IdCli, mensajes)) Then
                CliComDAL = New ClientesComDAL(tokenConexion)
                If (CliComDAL.existeClienteCom(IdCli)) Then
                    CliComBE = CliComDAL.getClienteCom(IdCli)
                    If (CliComBE IsNot Nothing) Then
                        codigoResp = 0
                        mensajes = "Se obtuvieron los Datos Comerciales del Cliente con éxito."
                        Return CliComBE
                    Else
                        codigoResp = 346
                        mensajes = "No se obtuvieron los Datos Comerciales del Cliente"
                        Return Nothing
                    End If
                Else
                    codigoResp = 341
                    mensajes = "Cliente no existe" & vbCrLf & mensajes
                    Return Nothing
                End If
            Else
                codigoResp = 1
                mensajes = "El Id del Cliente proporcionado no existe: " & mensajes
                Return Nothing
            End If
        Catch ex As Exception
            Log.LogException(ex, "ClientesComBL.GetClienteCom")
            codigoResp = 999
            mensajes = mensajes & "Excepción al obtener información del Cliente: " & ex.Message
            Return Nothing
        Finally
            CliComDAL = Nothing
            CliComBE = Nothing
        End Try
    End Function

    Private Function EsValidoParaGetClienteCom(ByRef IdCli As Integer, ByRef mensaje As String) As Boolean
        mensaje = ""
        Try
            If (String.IsNullOrEmpty(IdCli)) Then
                mensaje &= "El campo ID del Cliente no puede ir vacio." & vbCrLf
            Else
                If (IdCli <= 0) Then
                    mensaje &= "El Id de la Cliente debe ser mayor a 0" & vbCrLf
                End If
            End If

            Return (mensaje = "")
        Catch ex As Exception
            Log.LogException(ex, "ClientesComBL.EsValidoParaGetClienteCom")
            mensaje &= ex.Message
            Return False
        End Try
    End Function

End Class
